﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Rung.Net.Enums
{
    /// <summary>
    /// Stop reasons.
    /// </summary>
    public enum NetStoppedReason
    {
        Manually,
        Remote,
        Exception,
        SessionEnd
    }

    /// <summary>
    /// Rejection reasons.
    /// </summary>
    public enum NetRejectedReason { Full, Other }

    /// <summary>
    /// 回应模式。
    /// </summary>
    public enum NetEchoMode
    {
        None,
        EchoAll,
        EchoAllExceptSender,
        EchoSender
    }

    public class MessageTypeBase
    {
        /// <summary>
        /// 为系统内部变量空出的偏移量。
        /// 所有子类的类型定义必须加上该偏移量。
        /// </summary>
        protected const int Offset = 20;

        /// <summary>
        /// 未知消息类型（异常消息）。
        /// </summary>
        public const int Unknow = 0;
        /// <summary>
        /// 无需反馈的消息。
        /// </summary>
        public const int EchoNone = 1;
        /// <summary>
        /// 需要反馈发送者的消息。
        /// </summary>
        public const int EchoSender = 2;
        /// <summary>
        /// 需要反馈所有客户端的消息。
        /// </summary>
        public const int EchoAllClient = 3;
        /// <summary>
        /// 需要反馈除发送者外所有客户端的消息。
        /// </summary>
        public const int EchoAllClientExceptSender = 4;
        /// <summary>
        /// 需要反馈服务端和客户端的消息。
        /// </summary>
        public const int EchoAll = 5;

        /// <summary>
        /// 【Cache 模式】下，文件传送完毕后引发的消息。
        /// </summary>
        public const int CacheFinished = 6;

        #region Cache 模式专用
        /// <summary>
        /// 【已废弃，所有的文件传输都走“二次握手”流程】Cache 模式下，小数据的正常传输（单包传输）标识。
        /// </summary>
        [Obsolete]
        internal const int Cache_SiglePackage = 7;
        /// <summary>
        /// Cache 模式下，握手阶段数据包。
        /// </summary>
        internal const int Cache_HandShake = 8;
        /// <summary>
        /// 在【Unsafe 模式】中，主动方通知被动方单次传输的数据包最大的容量。
        /// 与消息 PackageMaxLength2 完成“二次握手”的一个来回。
        /// </summary>
        internal const int Cache_PackageMaxLength1 = 9;
        /// <summary>
        /// 在【Unsafe 模式】中，被动方通知主动方单次传输的数据包最大的容量。
        /// 与消息 PackageMaxLength1 完成“二次握手”的一个来回。
        /// </summary>
        internal const int Cache_PackageMaxLength2 = 10; 
        /// <summary>
        /// Cache 模式下，传输阶段数据包。
        /// </summary>
        internal const int Cache_CachePackage = 11;
        /// <summary>
        /// Cache 模式下，接收方通知发送方完成一个数据包的接受。
        /// </summary>
        internal const int Cache_CachePackageReceived = 12;
        /// <summary>
        /// Cache 模式下，接收方通知发送方重新发送当前包。
        /// </summary>
        internal const int Cache_Resend = 13;
        #endregion

        #region Session 模式专用
        internal const int Session_SessionEnd = 14;
        #endregion
    }

    public class LevelSeperators
    {
        internal const char Level0 = '/';
        public const char Level1 = '&';
        public const char Level2 = '#';
        public const char Level3 = '%';
    }
}
